/*
 * @(#)DSAKeyPairGenerator.java	1.7 01/12/12
 *
 * Sun Microsystems, Inc.版权所有版权所有。太阳专有/保密。使用受许可条款的约束。
 */
 
package java.security.interfaces;

import java.security.*;

/**
 * An interface to an object capable of generating DSA key pairs. 
 *
 * 每个初始化方法可以被调用任意次数。如果在DSAKeyPairGenerator上没有调用初始化方法，
 * 则默认是生成1024位密钥，使用预先计算的p, q和g参数和一个SecureRandom实例作为随机位源。
 * 
 * 用户通常希望指示DSA特定参数并生成适用于DSA算法的密钥对
 * 
 * <ol>
 * 
 * 通过以“DSA”为参数调用KeyPairGenerator getInstance方法，获取DSA算法的密钥对生成器。
 * 
 * 通过将结果强制转换为DSAKeyPairGenerator并从该DSAKeyPairGenerator接口调用其中一个初始化方法来初始化生成器。
 * 
 * 通过从KeyPairGenerator类调用<code>generateKeyPair</code>方法来生成密钥对。
 * 
 * </ol> 
 *
 * 注意:并不总是需要对DSA密钥对生成器进行特定于算法的初始化。也就是说，并不总是需要在该接口中调用<code>initialize</code>方法。
 * 当您接受算法特定参数的默认值时，只需在KeyPairGenerator接口中使用initialize方法进行与算法无关的初始化。
 * 
 * @see KeyPairGenerator
 */
public interface DSAKeyPairGenerator {

    /**
     * Initializes the key pair generator using p, q and g, the DSA
     * family parameters.
     *
     * @param params the parameters to use to generate the keys.
     *
     * @param random the random bit source to use to generate 
     * key bits.
     *
     * @exception InvalidParameterException if the parameters passed are
     * invalid or null.
     */
   public void initialize(DSAParams params, SecureRandom random)
   throws InvalidParameterException;

    /**
     * Initializes the key pair generator for a given modulus length,
     * without parameters. 
     *
     * 如果<code>genParams</code>为true，该方法将生成新的p、q和g参数。
     * 如果为false，则该方法将使用请求的模数长度的预先计算参数。如果模数长度没有预先计算的参数，则会引发异常。
     * 可以保证，对于长度为512和1024位的模量，始终存在默认参数。
     *
     * @param modlen 长度模量，以位为单位。取值范围是512 ~ 1024(含1024)之间8的任意倍数。
     *
     * @param random the random bit source to use to generate 
     * key bits.
     *
     * @param genParams whether or not to generate new parameters for
     * the modulus length requested.
     *
     * @exception InvalidParameterException
     * 如果模数长度不在512和1024之间，或者如果genParams为false并且没有预先计算请求的模数长度的参数。
     */
    public void initialize(int modlen, boolean genParams, SecureRandom random)
    throws InvalidParameterException;
}
